Repository navigation
fix(aws-startup-advisor): refresh GPT-5.4/GPT-5.5 Bedrock endpoint metadata from the public model cards - #583
herosjourney wants to merge 9 commits into
Conversation
…tadata from the public model cards The plugin recorded GPT-5.4 and GPT-5.5 as bedrock-mantle-only (no CRIS, no inference profile, no bedrock-runtime surface) with Chat Completions "unconfirmed", a 272K context window and no long-context price tier, and the canonical catalog cited "internal reference" probes as provenance. The public model cards no longer say any of that. This PR corrects the metadata only; it does not change endpoint selection, dispatch, or add new code paths. Sources (read 2026-11-06 via the AWS Documentation MCP tools): - https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-openai-gpt-54.html - https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-openai-gpt-55.html What the cards state, now recorded verbatim in the catalog and prose: - Endpoints: bedrock-runtime supported (Responses, Chat Completions, Converse; not Messages/Invoke) and bedrock-mantle supported (Responses, Chat Completions). Runtime has no in-region form; requests name us.openai.gpt-5.4 / global.openai.gpt-5.4 and us.openai.gpt-5.5 / global.openai.gpt-5.5. Mantle in-region: 5.4 = us-east-1, us-east-2, us-west-2, us-gov-west-1; 5.5 = us-east-1, us-east-2. US Geo CRIS from 6 regions, Global CRIS from 33. - Context 1,050,000 tokens shared, 128,000 max output. - Pricing (Standard, In-Region only; Priority/Flex unsupported): 5.4 short 2.75 / 0.275 cache read / 16.50, long 5.50 / 0.55 / 24.75, GovCloud short 3.375 / 0.3375 / 20.25; 5.5 short 5.50 / 0.55 / 33.00, long 11.00 / 1.10 / 49.50. No Geo/Global price rows, so prose keeps the ~10% figure for these two on every inference option and never claims parity. - Runtime features: invocation logs, streaming, Guardrails and application inference profiles (Converse only), implicit prompt caching and structured outputs (Responses only); no server-side tool use. Changes: - skills/shared/ai/models/openai-bedrock.json: GPT-5.4/5.5 rows re-sourced to the public cards (no "internal reference"), mantle_openai_chat available, runtime_converse path with CRIS, inference_profiles (us/global), region_availability, pricing tiers, context/output limits; path-level constraints corrected. - Canonical shared docs: ai-openai-to-bedrock.md (Tier 0 table, region gate, caching, Bedrock-native section, volume guidance), ai-migration-guardrails.md, schema-design-aws-ai.md (ban is on BARE ids paired with converse/runtime, not on the models), bedrock-pricing-cache.md (rows, long-context table, caching note, GovCloud rate). - gcp-to-aws and azure-to-aws: references/shared/openai-on-bedrock.md, shared/schema-design-aws-ai.md (azure), design-ai.md, design.md/generate.md _assert lines (azure), generate-artifacts-ai.md (azure), generate-ai.md, discover-preview.md and clarify-ai-only.md (gcp), clarify-ai-only.md (azure). - bedrock-migration-assessment clarify-ai-only.md; agent-advisor model-recommend.md (documents the engine's current GPT-5.x reshape as an engine limitation, not a model fact). - llm-to-bedrock: resolve-bedrock-model-id.md (Case A/B), behavior-delta openai-to-bedrock.md, SKILL.md (two id-form sentences); docstrings/comments in preflight_bedrock.py, iam_policy.py, bedrock_pricing.py and the preflight 404 remedy string. The is_mantle_model / is_mantle_gpt ID-form logic is unchanged. - agents: llm2bedrock-code-rewriter.md (Converse rule is id-form-dependent), llm2bedrock-report-generator.md (cost text), llm2bedrock-prompt-evaluator.md. - openai_model_recommendation.py: only the chat_completions_to_responses block message text (dropped the "GPT-5.x on Mantle rejects Chat Completions" claim). - Tests: tests/test_gpt6_review_round2.py, test_gpt6_review_round5.py, test_gpt6_round4_findings.py and agent-advisor scripts/test_openai_model_recommendation.py now assert the corrected public facts (CRIS ids present, "mantle-only"/"no CRIS"/"unconfirmed" absent, catalog provenance is the public card). New regression tests in test_preflight_bedrock.py, test_iam_policy.py, test_bedrock_pricing.py prove us./global.openai.gpt-5.4|5.5 classify as runtime and bare ids as mantle in all three helpers. - Vendored copies under agent-advisor, gcp-to-aws, azure-to-aws re-synced with tools/sync-vendored.py. Validation (all run from the worktree with mise Python 3.12): - mise -C plugins/aws-startup-advisor run ci: PASS - lint:md 0 errors; lint:model-id OK (19 retired IDs enforced); lint:model-staleness fresh (4d old, 45d window); lint:model-catalog-drift OK (3 pre-existing warnings: sonnet-5-5, haiku-5-5, gpt-6.1-terra not in catalog; unrelated); lint:startup-model-pricing OK; lint:artifacts PASS (99 checked, 0 errors); lint:vendored-parity PASS (62 files byte-identical); lint:skill-refs PASS (1482 checked, 0 missing); lint:consent-disclosure OK; test: 1395 passed, 222 subtests passed; test:telemetry: 311 passed; test:heroku-source-review: 44 pass, 0 fail - agent-advisor pytest (skills/agent-advisor/scripts): 564 passed, 0 failed (562 at base + 2 new) - llm-to-bedrock pytest (skills/llm-to-bedrock/scripts): 418 passed, 0 failed (415 at base + 3 new; needs --with httpx --with aws-bedrock-token-generator) - root: python3 tools/validate.py "All validations passed"; mise run lint:md 0 issues / 2763 files; lint:manifests, lint:skill-parity, lint:spec all pass; test:tools 6 OK. mise run build's security step fails on a pre-existing gitleaks false positive in upstream commit f8d09fd (tests/test_bedrock_migration_assessment_discover.py:118, "claude-3.5-sonnet"); gitleaks protect over this change set: no leaks found. - grep over plugins/ for mantle-only / "no CRIS" / "no inference profile" / "no runtime path" / "unconfirmed" / "internal reference" / "no 1M tier" near GPT-5.4/5.5: no remaining claims (only negative test assertions and the bare-id rule "bare proprietary openai.gpt-* IDs use Mantle only"). Base: 0a218f8 (upstream/main)
…ift caused by the GPT-5.4/5.5 catalog facts Review round 1 (CHANGES_REQUESTED, 2 blockers) on c1944a5. Finding 1: recording the public GPT-5.5/GPT-5.4 facts in skills/shared/ai/models/openai-bedrock.json (mantle_openai_chat available, region_availability) changes agent-advisor recommendations through the unchanged catalog-order fallback in openai_model_recommendation.py (_mantle_candidate_order -> _catalog_model_for_path): GPT-5.5 and GPT-5.4 precede GPT-6 Astra in catalog key order, so a GPT-6 Sol / 6.1 Sol Chat Completions source outside us-east-1 now lands on - openai.gpt-5.5 via mantle_openai_chat in us-east-2 (base: decision_required, mantle_region_unavailable, options mantle chat / runtime_converse) - openai.gpt-5.4 via mantle_openai_chat in us-west-2 (base: openai.gpt-6-astra) and a GPT-5.6 Sol Responses source in us-west-2 lands on openai.gpt-5.6-terra (base: openai.gpt-5.5, whose cataloged footprint is us-east-1/us-east-2 only). The previous commit message called this PR "no behavior change"; that was wrong for these cells. The catalog facts are kept (they are what the public cards state); the engine ordering is NOT changed in this PR. Instead: - skills/agent-advisor/scripts/test_openai_model_recommendation.py: new regression tests pin all five cells so the shift is deliberate and visible (test_gpt6_chat_outside_own_footprint_falls_back_to_in_region_gpt5_chat x4, test_gpt56_sol_responses_outside_us_east_skips_gpt55_for_in_region_terra). - skills/agent-advisor/references/phases/model-recommend/model-recommend.md: the engine-limitation paragraph now states that Chat fallbacks walk catalog order, that GPT-5.5/5.4 precede GPT-6 Astra, and that a GPT-6 Chat source outside us-east-1 lands on GPT-5.5 (us-east-2) / GPT-5.4 (us-west-2); a newer-generation source falling back to an older-generation model is an engine ordering limitation to resolve in the follow-up selection PR (PR 2). Finding 2: skills/agent-advisor/scripts/openai_model_recommendation.py:118-119 still said "the (Mantle-only) GPT-5.x family". Reworded to the engine fact (GPT-5.x sources not recognized as same-model runtime identities map to Claude tiers; GPT-5.5/5.4 do carry a cataloged runtime_converse path via us./global. CRIS ids). Grep over plugins/ for mantle-only / "no CRIS" / "no inference profile" / unconfirmed / "internal reference" near GPT-5.4/5.5/5.x is now clean apart from negative test assertions, the GovCloud Opus 5.5 pricing row, and the bare-id rule ("bare proprietary openai.gpt-* IDs use Mantle only"). Carry-forward for PR 2 (endpoint selection): reorder / tier the mantle_openai_chat candidate walk so a GPT-6 source does not fall back to GPT-5.4/5.5 ahead of GPT-6 Astra; add GPT-5.5/5.4 to _SOURCE_MODEL_KEYS so they are recognized as same-model runtime identities. No new behavior added; no dispatch or endpoint-selection code changed. No vendored files affected (none of the three files is in the sync manifest); lint:vendored-parity re-run and still 62/62 byte-identical. Sources (public model cards, read 2026-11-06 via the AWS Documentation MCP tools): - https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-openai-gpt-54.html - https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-openai-gpt-55.html Validation (run from the worktree with mise Python 3.12): - mise -C plugins/aws-startup-advisor run ci: PASS - lint:md 0 errors; lint:model-id OK (19 retired IDs enforced); lint:model-staleness fresh (4d old, 45d window); lint:model-catalog-drift OK (3 pre-existing warnings, unrelated); lint:startup-model-pricing OK; lint:artifacts PASS (99 checked, 0 errors); lint:vendored-parity PASS (62 files byte-identical); lint:skill-refs PASS (1482 checked, 0 missing); lint:consent-disclosure OK (6 checked); test: 1395 passed, 222 subtests passed; test:telemetry 311 passed; test:heroku-source-review 44 pass, 0 fail - agent-advisor pytest (skills/agent-advisor/scripts): 569 passed, 0 failed (564 at c1944a5 + 5 new) - llm-to-bedrock pytest (skills/llm-to-bedrock/scripts): 418 passed, 0 failed - root: python3 tools/validate.py "All validations passed"; mise run lint:md 0 issues / 2763 files; lint:manifests, lint:spec, lint:skill-parity pass; test:tools OK. mise run build's security step still fails only on the pre-existing gitleaks finding in upstream commit f8d09fd (tests/test_bedrock_migration_assessment_discover.py:118); gitleaks protect --staged over this change set: no leaks found. Base: 0a218f8 (upstream/main)
…re constraints per model for GPT-5.4/5.5
The GPT-5.4 and GPT-5.5 model cards publish only us. and global. CRIS ids;
the in. profile exists for GPT-5.6 only. The runtime_converse path strength
and both schema-design vocabulary/checklist lines attached us./in./global.
to all three models, contradicting the catalog's own next constraint and
openai-on-bedrock.md. Rewritten so in. stays on GPT-5.6 / GPT-6.
The GPT-5.6 runtime constraint ("does not support server-side tool use,
structured outputs, or application inference profiles") is now scoped to
GPT-5.6, and a separate GPT-5.4/5.5 constraint records what their cards
mark: server-side tools unsupported; structured outputs and implicit prompt
caching Responses-only; Guardrails and application inference profiles
Converse-only.
Vendored copies re-synced (62 checked, 3 synced). Regression test added.
… the rewriter and Design/Generate checklists bc51f0c scoped the in. prefix to GPT-5.6 in the catalog and schema, but three consumers of that rule still said us./in./global. for GPT-5.4/5.5: agents/llm2bedrock-code-rewriter.md, gcp-to-aws design-ai.md's checklist, and azure-to-aws generate-artifacts-ai.md's checklist. Their model cards publish only us. and global. ids. Each now reads: us./in./global. for GPT-5.6; us./global. only for GPT-6, GPT-5.5 and GPT-5.4. Adds tests/test_gpt54_55_cris_prefix_scope.py, which reads the catalog, the shared/Azure schemas, the guardrails guide, and the three consumer files and fails on any window that pairs GPT-5.4/5.5 with a grouped us./in./global. grant without scoping in. to GPT-5.6. Verified to fail against the previous wording of all three files.
…and Luna only, not Sol
The GPT-5.6 Sol card (read 2026-11-07) publishes us.openai.gpt-5.6-sol and
global.openai.gpt-5.6-sol only; Terra and Luna publish us./in./us-gov./global.
Prior wording granted in. to "GPT-5.6" family-wide in the catalog strength,
the rewriter, the GCP Design and Azure Generate checklists, both schema
copies, and ai-migration-guardrails.md ("GPT-5.6 Sol/Terra/Luna
(us./in./global.)"). Each now reads: us./in./global. for GPT-5.6 Terra and
Luna; us./global. only for GPT-5.6 Sol, GPT-6, GPT-5.5 and GPT-5.4.
tests/test_gpt54_55_cris_prefix_scope.py now also scans the catalog strength
text and rejects any grouped in. grant to GPT-5.6 that does not name
Terra/Luna and place Sol in the us./global.-only set. Verified to fail
against the dfd07bd wording of every file above.
leon1418
left a comment
There was a problem hiding this comment.
[🤖 AI review 🤖]
Reviewed all 47 changed files at 6b873f8c9c1752f891c5a3195ce15bacf0cea839, including the Markdown workflows and unchanged consumers. Three corrections are needed before this metadata change can safely enable the documented runtime paths:
- Add the required default-project IAM grant for GPT-5.4/5.5 runtime IDs and profile ARNs, in the policy helper and both GCP/Azure setup recipes.
- Persist Converse as the selected client API when GPT-5.4/5.5 application inference profiles are required. Carry that choice through the current GCP/Azure design contracts; surface incompatible API requirements as a decision.
- Keep unpublished GPT-5.4/5.5 Geo/Global prices unverified. A planning proxy can be labeled as an assumption, but cannot establish a verified premium or savings percentage.
The inline comments identify the failure paths and acceptance checks. The disclosed source-recognition and fallback-order limitations are outside this correction list.
Validation: agent-advisor 570 passed; llm-to-bedrock 418 passed; plugin tests 1,398 passed plus 222 subtests. Vendored parity (62 files), artifact validation (99 fixtures), model-ID, pricing coverage, freshness, skill references, consent disclosure, root manifest validation and git diff --check passed. Independent source probes covered policy resources, model/profile selection, generated client API dispatch and stale-verification invalidation. GitHub checks were green at review time. No live AWS inference or deployment was performed.
…-project IAM grant, Converse for application profiles, In-Region-only pricing Three inline findings by leon1418 on 6b873f8, each verified against the public GPT-5.4 / GPT-5.5 model cards (read 2026-11-07): https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-openai-gpt-54.html https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-openai-gpt-55.html 1. IAM default-project grant (iam_policy.py:29). The cards require bedrock:InvokeModel on arn:aws:bedrock:{region}:{account-id}:project/default in addition to the inference profile. iam_policy.py gated that grant on is_gpt6_cris_model(). Added is_gpt54_55_cris_model() (exact us./global. openai.gpt-5.4 / -5.5 short ids and their inference-profile ARNs; bare mantle ids, GPT-5.6 CRIS ids and unrelated models do not match) and requires_default_project_grant(); generate_policy() now emits the third ARN for those ids. Updated the GPT-6-only sentence in gcp generate-ai.md, gcp/azure generate-artifacts-ai.md Step 3, and the report generator §6.4. 2. Application inference profiles are Converse-only (gcp design-ai.md:425). GCP and Azure Design now require required_client_api: "converse" when application inference profiles are the driving need on GPT-5.5 / GPT-5.4 (and any model whose card lists them Converse-only), forbid leaving the field absent, keep the responses default for a region-only move, and record a conflicting Responses-only need (structured outputs, implicit caching) as an explicit decision instead of a silent drop. Added checklist items to the GCP Validation Checklist and the Azure shared schema (required_client_api section and checklist). 3. Unpublished Geo/Global prices (ai-openai-to-bedrock.md:46). The cards publish commercial In-Region prices only. Scoped the verified ~10% premium to the In-Region option in the canonical guide (Tier 0 rows included), both openai-on-bedrock.md fact bases, the report generator and the pricing-cache rows; a CRIS plan needs a separately sourced Geo/Global price or reports the comparison unavailable, and an In-Region proxy is an unverified planning assumption with no verified premium or savings percentage. bedrock_pricing.lookup() already returns available:false for the CRIS ids; pinned with a test (short ids and profile ARNs, no PriceList call). Tests: test_iam_policy.py TestGpt54Gpt55CrisProjectArn (short ids, profile ARNs, bare/GPT-5.6/Anthropic controls, mixed run); test_bedrock_pricing.py test_gpt54_55_cris_ids_are_unpriced_not_inferred_from_in_region; new tests/test_gpt54_55_runtime_review_round3.py text contracts for all three findings. tools/sync-vendored.py re-run (5 copies synced). Validation (this commit, in the worktree): - mise -C plugins/aws-startup-advisor run ci: exit 0 (test 1407 passed + 222 subtests; test:telemetry 311 passed; heroku-source-review 44/44; lint:md 0 errors; vendored-parity PASS 62 files; skill-refs PASS 1482) - llm-to-bedrock: uv run --project scripts python -m pytest: 453 passed (bare mise python3 shows 10 ModuleNotFoundError: httpx in test_astra_execution_contract.py — environment, not the change) - agent-advisor: python3 -m pytest skills/agent-advisor: 570 passed - tests/test_gpt54_55_cris_prefix_scope.py: still green - python3 tools/validate.py: All validations passed (exit 0) - tools/sync-vendored.py --check: PASS - mise run security (gitleaks): 1 pre-existing upstream false positive at f8d09fd (tests/test_bedrock_migration_assessment_discover.py, generic-api-key), unrelated to this PR; nothing new flagged.
leon1418
left a comment
There was a problem hiding this comment.
[🤖 AI review 🤖]
Verified the three requested corrections at 8c37ef0f1e9a83d123d6662637fc6fadb6f068f8: GPT-5.4/5.5 runtime IAM now includes the default-project grant, application-profile requirements select Converse, and unpublished CRIS prices remain unverified. Evidence replies are in the original conversations, which are now resolved.
The follow-up covered all 49 changed files and relevant unchanged consumers. Local validation passed: 570 agent-advisor tests, 453 llm-to-bedrock tests, and 1,407 plugin tests plus 222 subtests. Focused policy/API/pricing probes, vendored parity, artifact validation, model-ID, pricing-coverage, reference and diff checks also passed. No live AWS inference or deployment was performed.
No remaining substantiated findings from this review. Approval is recommended for the user to submit; this is a COMMENT, not an approval or dismissal of the earlier review.
…policy and make Runtime the primary same-model OpenAI path in design guidance Base: 6b873f8 (PR 1 aws#583 tip). Public basis: Amazon Bedrock User Guide endpoints.html, models-endpoint-availability.html, inference-responses-api.html, inference-chat-completions.html, inference-messages-api.html, tool-use-server-side.html, web-search.html, projects.html, workspaces.html, cost-mgmt-application-inference-profiles.html, model-invocation-logging.html, monitoring-mantle-metrics.html, quotas-runtime.html, quotas-mantle.html, scaling-throughput-best-practices.html (all read 2026-11-07). - New canonical skills/shared/ai/bedrock-endpoint-policy.md (rule, mantle_selector enum, public matrix, lifecycle and quota wording), vendored into gcp-to-aws and azure-to-aws (README rows + sync). - ai-openai-to-bedrock.md / ai-openrouter-to-bedrock.md: runtime_openai_cris with the source app's required_client_api is the Tier 0 default; mantle_* only with a mantle_selector; Runtime steps shown first; "smallest change" phrasing removed. - Three schema-design-aws-ai.md copies: runtime_messages, messages, same_model_runtime, mantle_selector vocabulary; Runtime default stated. - gcp/azure design-ai.md, azure design.md/generate.md _assert, gcp/azure generate-artifacts-ai.md, gcp generate-ai.md, gcp estimate.md, azure estimate-assemble.md, both openai-on-bedrock.md Client setup: Runtime first and labelled default, Mantle selector-gated, same_model_runtime route added. - Fixtures: mantle_selector on the two mantle_openai_responses rows. - Tests: new tests/test_endpoint_policy_contract.py; extended test_generate_mantle_dispatch.py, test_ai_only_option_c_framework_route.py, test_gpt6_review_round2.py, test_gpt6_round4_findings.py. Verification (from plugins/aws-startup-advisor): - python3 tools/sync-vendored.py --check -> PASS, 64 files - uv run --no-project --with pytest python -m pytest tests -q -> 1406 passed (base 6b873f8: 1398) - uv run --project skills/llm-to-bedrock/scripts --with pytest python -m pytest skills/llm-to-bedrock/scripts -q -> 418 passed (unchanged) - uv run --project skills/agent-advisor/scripts --with pytest python -m pytest skills/agent-advisor/scripts -q -> 570 passed (unchanged) - mise run lint:md (0 errors / 823 files), lint:skill-refs (1508 refs, 0 missing), lint:artifacts (99/0), lint:vendored-parity (64), lint:model-id -> PASS - grep -rn -i -E 'primary path|smallest (possible )?change|remains the default| Mantle is the PRIMARY' skills | grep -v vendored -> every Mantle-related hit gone; remaining hits are pre-existing, unrelated to Bedrock endpoints (design-ref-harness.md:29, heroku-to-aws, gcp elastic-beanstalk.md, prompt-library bedrock-quota-manager.md, agent-advisor test_unit_grouping.py). agents/llm2bedrock-code-rewriter.md:260 is left for the execution-lane change.
GPT-5.4 and GPT-5.5 publish an In-Region price only, so a Geo or Global plan stays unpublished. Co-authored-by: Cursor <cursoragent@cursor.com>
…policy and make Runtime the primary same-model OpenAI path in design guidance Base: 6b873f8 (PR 1 aws#583 tip). Public basis: Amazon Bedrock User Guide endpoints.html, models-endpoint-availability.html, inference-responses-api.html, inference-chat-completions.html, inference-messages-api.html, tool-use-server-side.html, web-search.html, projects.html, workspaces.html, cost-mgmt-application-inference-profiles.html, model-invocation-logging.html, monitoring-mantle-metrics.html, quotas-runtime.html, quotas-mantle.html, scaling-throughput-best-practices.html (all read 2026-11-07). - New canonical skills/shared/ai/bedrock-endpoint-policy.md (rule, mantle_selector enum, public matrix, lifecycle and quota wording), vendored into gcp-to-aws and azure-to-aws (README rows + sync). - ai-openai-to-bedrock.md / ai-openrouter-to-bedrock.md: runtime_openai_cris with the source app's required_client_api is the Tier 0 default; mantle_* only with a mantle_selector; Runtime steps shown first; "smallest change" phrasing removed. - Three schema-design-aws-ai.md copies: runtime_messages, messages, same_model_runtime, mantle_selector vocabulary; Runtime default stated. - gcp/azure design-ai.md, azure design.md/generate.md _assert, gcp/azure generate-artifacts-ai.md, gcp generate-ai.md, gcp estimate.md, azure estimate-assemble.md, both openai-on-bedrock.md Client setup: Runtime first and labelled default, Mantle selector-gated, same_model_runtime route added. - Fixtures: mantle_selector on the two mantle_openai_responses rows. - Tests: new tests/test_endpoint_policy_contract.py; extended test_generate_mantle_dispatch.py, test_ai_only_option_c_framework_route.py, test_gpt6_review_round2.py, test_gpt6_round4_findings.py. Verification (from plugins/aws-startup-advisor): - python3 tools/sync-vendored.py --check -> PASS, 64 files - uv run --no-project --with pytest python -m pytest tests -q -> 1406 passed (base 6b873f8: 1398) - uv run --project skills/llm-to-bedrock/scripts --with pytest python -m pytest skills/llm-to-bedrock/scripts -q -> 418 passed (unchanged) - uv run --project skills/agent-advisor/scripts --with pytest python -m pytest skills/agent-advisor/scripts -q -> 570 passed (unchanged) - mise run lint:md (0 errors / 823 files), lint:skill-refs (1508 refs, 0 missing), lint:artifacts (99/0), lint:vendored-parity (64), lint:model-id -> PASS - grep -rn -i -E 'primary path|smallest (possible )?change|remains the default| Mantle is the PRIMARY' skills | grep -v vendored -> every Mantle-related hit gone; remaining hits are pre-existing, unrelated to Bedrock endpoints (design-ref-harness.md:29, heroku-to-aws, gcp elastic-beanstalk.md, prompt-library bedrock-quota-manager.md, agent-advisor test_unit_grouping.py). agents/llm2bedrock-code-rewriter.md:260 is left for the execution-lane change.
Conflict resolution (plugins/aws-startup-advisor/skills/shared/ai/models/openai-bedrock.json, top-level metadata only; every model entry auto-merged): - source: union. Keeps main's Haiku 5.5 model-card evidence (read 2026-11-09) and the Opus 5.5 line, plus this branch's GPT-5.5/GPT-5.4 model-card re-read (2026-11-06, runtime CRIS ids, Chat Completions on mantle). Trailing sentence merged to "Other OpenAI and unchanged entries retain their evidence ...". - disclaimer: union. Main's Haiku 5.5 fast/low-cost Converse tier sentence first, then this branch's GPT-5.5/GPT-5.4 re-read note (runtime CRIS paths, Chat Completions on mantle, 1.05M context, long-context pricing), then the shared Opus 5.5 / Fable / Mythos / eu-west-2 text that both sides carried unchanged. - verified_at: main's 2026-11-09 (newer than the branch's 2026-09-24). - openai_gpt_5_5 / openai_gpt_5_4 entries: branch values (refreshed runtime metadata, pricing, inference_profiles, region_availability, capabilities); main did not touch these entries. - anthropic_claude_haiku_5_5, Haiku 4.5 display_name/capability_source, and the pretty-printed GPT-6 Sol/Luna/6.1 Sol arrays: main values; the branch did not touch these. - Vendored copy regenerated with tools/sync-vendored.py (--check passes), not hand-edited. Verification on this merge: - cd plugins/aws-startup-advisor && mise run ci: all tasks finished (lint:md 0 errors, lint:model-id, lint:model-staleness, lint:model-catalog-drift, lint:startup-model-pricing, lint:artifacts PASS 104 artifacts, lint:vendored-parity PASS 62 files, lint:skill-refs PASS 1498 refs, pytest 1489 passed + 225 subtests, telemetry 311 passed). - skills/agent-advisor/scripts pytest: 597 passed. - skills/llm-to-bedrock/scripts pytest: 453 passed (run via uv with httpx/openai/ aws-bedrock-token-generator/jsonschema/boto3 available).
Port GPT-5.4/5.5 catalog edits into bedrock-model-registry.json and re-render openai-bedrock.json via tools/build-model-catalogs.py, re-sync vendored copies. Add optional pricing object to registry/catalog schemas and renderer. Verified: mise run ci (plugins/aws-startup-advisor) passed, 1731 tests.
…un ci green (1857 passed); build-model-catalogs/sync-vendored --check pass
Stale: made against an older head. Findings were addressed and all threads resolved; the branch was merged with current main and re-pushed. Re-review requested.
|
All review threads are replied to and resolved. The branch is now merged up to current main (head |
Problem
The
aws-startup-advisorplugin describes GPT-5.4 and GPT-5.5 on Bedrock as reachable only through the OpenAI-compatible (bedrock-mantle) endpoint: no cross-region inference (CRIS) ids, no inference profiles, nobedrock-runtimesurface, Chat Completions "unconfirmed", a 272K context window, and no long-context price tier. The canonical catalogskills/shared/ai/models/openai-bedrock.jsoncited an "internal reference" as the provenance for those rows.The public Bedrock model cards say otherwise. Both models are served by
bedrock-runtime(Responses, Chat Completions, Converse) throughus.openai.gpt-5.4/global.openai.gpt-5.4andus.openai.gpt-5.5/global.openai.gpt-5.5, and bybedrock-mantle(Responses, Chat Completions) in-region. Context is 1,050,000 tokens shared with 128,000 max output, and each model has a long-context price tier. Because the same stale statements are repeated in roughly 20 places (shared docs, three vendored copies, phase files ingcp-to-aws/azure-to-aws/bedrock-migration-assessment,llm-to-bedrockhelpers, agent prompts, and the tests that lock them in), a startup following the plugin today is told its GPT-5.4/5.5 workload cannot use Converse, Guardrails, or CRIS, and is quoted the wrong context limit and price table.Fix
Re-source the GPT-5.4 and GPT-5.5 rows in the canonical catalog from the two public model cards and bring every piece of prose, every vendored copy, and every test assertion into line with what the cards state. Concretely:
skills/shared/ai/models/openai-bedrock.json):mantle_openai_chatmarked available; aruntime_conversepath with CRIS ids;inference_profiles(us,global);region_availability(5.4: us-east-1, us-east-2, us-west-2, us-gov-west-1; 5.5: us-east-1, us-east-2); short and long-context pricing tiers plus the GovCloud rate for 5.4; 1,050,000 / 128,000 context and output limits; provenance is the public card URL. Path-level constraints corrected (Guardrails and application inference profiles on Converse only; implicit prompt caching and structured outputs on Responses only; no server-side tool use; Priority/Flex unsupported).ai-openai-to-bedrock.md,ai-migration-guardrails.md,schema-design-aws-ai.md,bedrock-pricing-cache.md): Tier 0 table, region gate, caching notes, Bedrock-native section, long-context table, GovCloud rate. The schema rule now bans bareopenai.gpt-*ids paired withconverse/runtime, not the models themselves. The pricing prose keeps the existing ~10% cross-region uplift wording for these two because the cards publish only In-Region Standard rows.gcp-to-aws,azure-to-aws,bedrock-migration-assessmentphase and shared files, and the three vendored copies (re-synced withtools/sync-vendored.py).agent-advisor:model-recommend.mddocuments the engine's current treatment of GPT-5.x as an engine limitation rather than a model fact;openai_model_recommendation.pychanges only two message strings (dropped the "GPT-5.x on Mantle rejects Chat Completions" claim and the "Mantle-only GPT-5.x family" wording). No candidate ordering or dispatch logic is touched.llm-to-bedrock:resolve-bedrock-model-id.md(Case A/B),openai-to-bedrock.mdbehavior delta,SKILL.md, and docstrings/comments plus the preflight 404 remedy string inpreflight_bedrock.py,iam_policy.py,bedrock_pricing.py. Theis_mantle_model/is_mantle_gptid-form logic is unchanged.llm2bedrock-code-rewriter.md(Converse rule is id-form dependent),llm2bedrock-report-generator.md,llm2bedrock-prompt-evaluator.md.us./global.openai.gpt-5.4|5.5classify as runtime and bare ids as mantle in all threellm-to-bedrockhelpers.Recording the corrected catalog facts has one visible side effect on recommendations, because the unchanged
agent-advisorChat fallback walks catalog key order and GPT-5.5 / GPT-5.4 precede GPT-6 Astra: a GPT-6 Sol / 6.1 Sol Chat Completions source outside us-east-1 now lands on GPT-5.5 (us-east-2) or GPT-5.4 (us-west-2), and a GPT-5.6 Sol Responses source in us-west-2 lands on GPT-5.6 Terra. Five new regression tests pin those cells so the shift is deliberate and visible, andmodel-recommend.mdcalls it out as an engine ordering limitation. It is not fixed here (see below).What this PR does NOT do
agent-advisorcandidate walk,_SOURCE_MODEL_KEYS, and thellm-to-bedrockid-form dispatch are byte-for-byte the same logic asmain. Reordering the Chat fallback so a newer-generation source does not fall back to GPT-5.4/5.5 ahead of GPT-6 Astra, and recognizing GPT-5.4/5.5 as same-model runtime identities, is PR 2 of this stack.bedrock-runtimeGPT-5.4/5.5 route are introduced. That is PR 3 of this stack.README.md, ormise.toml.Scope
Skills:
agent-advisor,azure-to-aws,bedrock-migration-assessment,gcp-to-aws,llm-to-bedrock,shared. No new skills.Files: 46 modified (0 added, 0 deleted), +857 / −390, all under
plugins/aws-startup-advisor/.skills/shared/ai/: 5 canonical files (models/openai-bedrock.json,ai-openai-to-bedrock.md,ai-migration-guardrails.md,schema-design-aws-ai.md,bedrock-pricing-cache.md).agent-advisor/references/vendored/ai/(2),azure-to-aws/references/vendored/ai/(4),gcp-to-aws/references/vendored/ai/(4), byte-identical to the canonical files.agent-advisor:model-recommend.md,scripts/openai_model_recommendation.py,scripts/test_openai_model_recommendation.py.azure-to-aws:clarify-ai-only.md,design-ai.md,design.md,generate-artifacts-ai.md,generate.md,shared/openai-on-bedrock.md,shared/schema-design-aws-ai.md.gcp-to-aws:clarify-ai-only.md,design-ai.md,discover-preview.md,generate-ai.md,shared/openai-on-bedrock.md.bedrock-migration-assessment:clarify-ai-only.md.llm-to-bedrock:SKILL.md,resolve-bedrock-model-id.md,behavior-delta-detection/references/openai-to-bedrock.md,scripts/preflight_bedrock.py,scripts/iam_policy.py,scripts/bedrock_pricing.py, and their three test files.agents/:llm2bedrock-code-rewriter.md,llm2bedrock-prompt-evaluator.md,llm2bedrock-report-generator.md.tests/:test_gpt6_review_round2.py,test_gpt6_review_round5.py,test_gpt6_round4_findings.py.Base:
mainat0a218f8c. Two commits: the metadata refresh, and a follow-up that pins and discloses the fallback shift described above.Not touched: endpoint-selection and dispatch logic (
_mantle_candidate_order,_catalog_model_for_path,_SOURCE_MODEL_KEYS,is_mantle_model,is_mantle_gpt),plugin.json, plugin manifests, marketplaces, pluginREADME.md,mise.toml,heroku-to-awsand the other non-AI skills,.mcp.json.Validation
Sources: the public Bedrock model cards, read 2026-11-06.
Local gates, all run from this branch against
mainat0a218f8c, all exit 0 unless noted:mise -C plugins/aws-startup-advisor run ci: PASS.test1,395 passed / 222 subtests passed;test:telemetry311 passed;test:heroku-source-review44 pass / 0 fail;lint:md0 errors;lint:model-idOK (19 retired ids enforced);lint:model-stalenessfresh (4 days old, 45-day window);lint:model-catalog-driftOK (3 pre-existing warnings,sonnet-5-5,haiku-5-5,gpt-6.1-terranot in catalog, unrelated);lint:startup-model-pricingOK;lint:artifacts99 checked / 0 errors;lint:vendored-parity62 files byte-identical;lint:skill-refs1,482 checked / 0 missing;lint:consent-disclosureOK (6 checked).agent-advisorpytest (skills/agent-advisor/scripts): 569 passed / 0 failed (562 at base, 7 new).llm-to-bedrockpytest (skills/llm-to-bedrock/scripts): 418 passed / 0 failed (415 at base, 3 new; needs--with httpx --with aws-bedrock-token-generator).python3 tools/validate.py"All validations passed";mise run lint:md0 issues / 2,763 files;lint:manifests,lint:spec,lint:skill-paritypass;test:toolsOK.mise run build: thesecuritystep fails only on a pre-existing gitleaks finding in upstream commitf8d09fd1(tests/test_bedrock_migration_assessment_discover.py:118, aclaude-3.5-sonnetmodel string), unrelated to this branch.gitleaks protect --stagedover this change set: no leaks found.plugins/for "mantle-only", "no CRIS", "no inference profile", "no runtime path", "unconfirmed", "internal reference", "no 1M tier" near GPT-5.4 / GPT-5.5 / GPT-5.x: no remaining claims. The only hits are negative test assertions, the GovCloud Opus 5.5 pricing row, and the bare-id rule ("bare proprietaryopenai.gpt-*ids use Mantle only"), which is still correct.Review round 2 (head
8c37ef0f, replies to the three inline threads by leon1418 on6b873f8c):iam_policy.py:29):is_gpt54_55_cris_model()/requires_default_project_grant()added;generate_policy()emitsarn:aws:bedrock:{region}:{account-id}:project/defaultfor theus./global.openai.gpt-5.4|5.5ids and profile ARNs; GPT-6-only wording updated in gcpgenerate-ai.md, gcp/azuregenerate-artifacts-ai.mdand the report generator. Tests:test_iam_policy.py::TestGpt54Gpt55CrisProjectArn.design-ai.md:425): GCP/Azure Design requirerequired_client_api: "converse"when application profiles drive the move on GPT-5.5/5.4, keep theresponsesdefault for a region-only move, and record a conflicting Responses-only need as an explicit decision; checklist items added to the GCP checklist and Azure shared schema.ai-openai-to-bedrock.md:46): the ~10% premium is scoped to the commercial In-Region option across the canonical guide, bothopenai-on-bedrock.mdfact bases, the report generator and the pricing-cache rows; CRIS plans source a Geo/Global price separately or report the comparison unavailable.bedrock_pricing.lookup()available: falsefor the CRIS ids pinned bytest_bedrock_pricing.py::test_gpt54_55_cris_ids_are_unpriced_not_inferred_from_in_region. This supersedes the third Limitations bullet below.Text contracts for all three in new
tests/test_gpt54_55_runtime_review_round3.py;tools/sync-vendored.pyre-run (5 copies). Updated counts: plugin CItest1,407 passed / 222 subtests (was 1,395);test:telemetry311;heroku-source-review44/44;lint:vendored-parity62 files;lint:skill-refs1,482.agent-advisorpytest 570 passed;llm-to-bedrockpytest 453 passed (viauv run --project scripts).python3 tools/validate.pypassed;tools/sync-vendored.py --checkPASS.mise run securitystill reports only the pre-existing upstream gitleaks false positive atf8d09fd1.Limitations
agent-advisorChat fallback now routes a GPT-6 Sol / 6.1 Sol Chat Completions source outside us-east-1 to GPT-5.5 or GPT-5.4 (an older generation) because the catalog walk is in key order. This is pinned by tests and documented inmodel-recommend.md; the ordering fix is deferred to PR 2 of this stack so that this PR stays a metadata correction._SOURCE_MODEL_KEYS, so a GPT-5.4/5.5 source workload still maps to Claude tiers rather than being recognized as a same-model runtime identity. Also deferred to PR 2.lint:model-catalog-driftcarries 3 pre-existing warnings andmise run build's security step a pre-existing gitleaks finding, both inherited frommainand not addressed here.Update after merging main
Head
e17c00ac. Main was merged into this branch, including #567, #581, #600, #607, #619 and #620. The only conflict was the generated OpenAI model catalog. Main no longer editsskills/shared/ai/models/openai-bedrock.jsonby hand: it is rendered fromskills/shared/ai/models/bedrock-model-registry.jsonbytools/build-model-catalogs.py, and the vendored copies come fromtools/sync-vendored.py. This PR's GPT-5.4/GPT-5.5 corrections were therefore ported into the registry and the catalogs re-rendered; wherever this description says "canonical catalog", the registry is the source and the catalog is its rendered output. The full plugin CI (mise run ci) passed at this head (1,731 tests). The base0a218f8cand the counts above are from the first revision.Type of Change
Checklist
python3 tools/validate.pyStartup Advisor review checklist
mise -C plugins/aws-startup-advisor run ciand all checks pass.By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.